package com.jie.com.jie.controller;

import com.jie.com.jie.entity.Product;
import com.jie.com.jie.vos.CollectionVO;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import java.lang.reflect.Array;
import java.util.*;

/**
 * @Author: 张玉捷
 * @Date: 2021/5/8 20:40
 */
@RestController
public class ProductController {

    @Value("${server.port}")
    private int port;

    @GetMapping("/productList")
    public Map<String,Object> findbyCategoryIdAndPage(Integer page,Integer rows,Integer categoryId){
        System.out.println("当前页："+page+"当前页个数："+rows+"当前类别id："+categoryId);
        //分页查询符合当前页的集合数据List<Product>
        //根据类别id查询当前类别下的总条数
        Map<String,Object> map = new HashMap<>();
        List<Product> products = new ArrayList<>();
        products.add(new Product(1,"短裙",23.23,new Date()));
        products.add(new Product(2,"裙子",25.23,new Date()));
        products.add(new Product(3,"超短裙",26.23,new Date()));
        int total = 1000;
        map.put("rows",products);
        map.put("total",total);
        return map;
    }


    @GetMapping("/products")
    public List<Product> findByCategoryId(Integer categoryid){
        System.out.println("类别id:"+categoryid);
        //调用业务逻辑根据类型id查询商品列表
        List<Product> products = new ArrayList<>();
        products.add(new Product(1,"短裙",23.23,new Date()));
        products.add(new Product(2,"裙子",25.23,new Date()));
        products.add(new Product(3,"超短裙",26.23,new Date()));
        return products;
    }

    //定义一个接口接收id类型参数，返回一个基于id查询的对象
    @GetMapping("/product/{id}")
    public Product product(@PathVariable("id") Integer id){
        System.out.println("id:"+id);
        return new Product(id,"裤子",24.23,new Date());
    }

    //定义一个接口接收集合类型的参数,springmvc 不能直接接收集合类型的参数，如果想要接收集合类型参数，必须将集合放入对象中，使用对象的方式接收
    @GetMapping("/test4")
    public String test4(CollectionVO collectionVO){
        collectionVO.getIds().forEach(id-> System.out.println("id:"+id));
        return "test4 ok ，当前端口："+port;
    }

    //定义一个接口接收数组类型的参数
    @GetMapping("/test3")
    public String test3(String[] ids ){
        for (String id : ids) {
            System.out.println("id:"+id);
        }
        //手动转List
//        List<String> strings = Arrays.asList(ids);
        return "test3 ok ，当前端口："+port;
    }

    //定义一个接收对象类型的接口,@RequestBody以json格式传递
    @PostMapping("/test2")
    public String test2(@RequestBody Product product){
        System.out.println("product:"+product);
        return "test2 ok,当前端口号"+port;
    }

    //定义一个接收零散类型参数的接口，路径传参方式
    @GetMapping("/test1/{id}/{name}")
    public String test1(@PathVariable("id") String id,@PathVariable("name") String name  ){
        System.out.println("id:"+id+" name:"+name);
        return "test1 ok 当前服务的端口号："+port;
    }

    //定义一个接收零散类型参数的接口，queryString方式
    @GetMapping("/test")
    public String test(String name,Integer age){
        System.out.println("name:"+name+"age:"+age);
        return "test ok ,当前服务端口"+port;
    }

    @GetMapping("/product")
    public String product(){
        System.out.println("进入商品服务。。。。"+port);
        return "product ok 当前服务接口"+port;
    }

    @GetMapping("/list")
    public String list(){
        System.out.println("list service..."+port);
        return  "list ok 当前提供服务接口"+port;
    }
}
